//package qj.tool.jna;
//
//import com.sun.jna.Native;
//import com.sun.jna.Pointer;
//import com.sun.jna.Structure;
//import com.sun.jna.Structure.ByValue;
//import com.sun.jna.examples.win32.W32API;
//import com.sun.jna.ptr.ByReference;
//import com.sun.jna.ptr.IntByReference;
//
//public interface Advapi32 extends W32API {
//
//	Advapi32 INSTANCE = (Advapi32)
//        Native.loadLibrary("advapi32", Advapi32.class, DEFAULT_OPTIONS);
//    
////	boolean ClearEventLog(HANDLE hEventLog, String lpBackupFileName);
//
//	boolean LookupAccountName (
//			String lpSystemName,
//	        String lpAccountName,
//	        int Sid,
//	        IntByReference cbSid,
//	        String lpReferenceDomainName,
//	        IntByReference cchReferencedDomainName,
//	        IntByReference peUse
//    );
//	
//	int GetEffectiveRightsFromAcl(
//			int pacl, 
//			int pTrustee,
//			IntByReference pAccessRights);
//	
//	HANDLE OpenEventLog(String lpUNCServerName, String lpSourceName);
//	boolean GetOldestEventLogRecord(
//			  HANDLE hEventLog,
//			  int[] OldestRecord
//			);
//
//	boolean GetNumberOfEventLogRecords(HANDLE hEventLog, int[] recordCount);
//	
//	int EVENTLOG_SEQUENTIAL_READ = 0x0001;
//	int EVENTLOG_SEEK_READ = 0x0002;
//	int EVENTLOG_FORWARDS_READ = 0x0004;
//	int EVENTLOG_BACKWARDS_READ = 0x0008;
////	boolean ReadEventLog(
////			  HANDLE hEventLog,
////			  int dwReadFlags,
////			  int dwRecordOffset,
////			  EVENTLOGRECORD lpBuffer,
////			  int nNumberOfBytesToRead,
////			  IntByReference pnBytesRead,
////			  IntByReference pnMinNumberOfBytesNeeded
////			);
////	boolean ReadEventLog(
////			  HANDLE hEventLog,
////			  int dwReadFlags,
////			  int dwRecordOffset,
////			  EVENTLOGRECORD lpBuffer,
////			  int nNumberOfBytesToRead,
////			  int[] pnBytesRead,
////			  int[] pnMinNumberOfBytesNeeded
////			);
//	boolean ReadEventLog(
//			  HANDLE hEventLog,
//			  int dwReadFlags,
//			  int dwRecordOffset,
//			  byte[] lpBuffer,
//			  int nNumberOfBytesToRead,
//			  int[] pnBytesRead,
//			  int[] pnMinNumberOfBytesNeeded
//			);
//	
//	boolean CloseEventLog(HANDLE hEventLog);
//
//	class EVENTLOGRECORD extends Structure implements ByValue {
//		public DWORD Length;
//		public DWORD Reserved;
//		public DWORD RecordNumber;
//		public DWORD TimeGenerated;
//		public DWORD TimeWritten;
//		public DWORD EventID;
//		public WORD EventType;
//		public WORD NumStrings;
//		public WORD EventCategory;
//		public WORD ReservedFlags;
//		public DWORD ClosingRecordNumber;
//		public DWORD StringOffset;
//		public DWORD UserSidLength;
//		public DWORD UserSidOffset;
//		public DWORD DataLength;
//		public DWORD DataOffset;
//		
//		public static EVENTLOGRECORD createFrom( byte[] data )
//		{
//			EVENTLOGRECORD s = new EVENTLOGRECORD(); 
//			s.allocateMemory(data.length); 
//			s.getPointer().write(0, data, 0, data.length); 
//			s.read(); 
//			return s; 
//		}
//	}
//	
//
//	int SHTDN_REASON_MAJOR_APPLICATION = 0x00040000;
//	int SHTDN_REASON_MINOR_HUNG = 0x00000005;
//    boolean InitiateSystemShutdownEx(
//		String lpMachineName,
//		String lpMessage,
//		long dwTimeout,
//		boolean bForceAppsClosed,
//		boolean bRebootAfterShutdown,
//		long dwReason
//	);
//    
//    int TOKEN_ASSIGN_PRIMARY = 0x1;
//    int TOKEN_DUPLICATE = 0x2;
//    int TOKEN_IMPERSONATE = 0x4;
//    int TOKEN_QUERY = 0x8;
//    int TOKEN_QUERY_SOURCE = 0x10;
//    int TOKEN_ADJUST_PRIVILEGES = 0x20;
//    int TOKEN_ADJUST_GROUPS = 0x40;
//    int TOKEN_ADJUST_DEFAULT = 0x80;
//    int TOKEN_ALL_ACCESS = TOKEN_ASSIGN_PRIMARY 
//          + TOKEN_DUPLICATE + TOKEN_IMPERSONATE + TOKEN_QUERY
//          + TOKEN_QUERY_SOURCE + TOKEN_ADJUST_PRIVILEGES
//          + TOKEN_ADJUST_GROUPS + TOKEN_ADJUST_DEFAULT;
//
//    boolean OpenProcessToken(
//	  HANDLE ProcessHandle,
//	  int DesiredAccess,
//	  HANDLEByReference TokenHandle
//	);
//
//    boolean LookupPrivilegeValue(
//	  String lpSystemName,
//	  String lpName,
//	  LUIDByReference lpLuid
//	);
//
//    
//    boolean AdjustTokenPrivileges(HANDLE TokenHandle,
//			boolean DisableAllPrivileges, TOKEN_PRIVILEGES[] NewState,
//			long BufferLength, byte[] PreviousState, long[] ReturnLength);
//
//    class TOKEN_PRIVILEGES extends Structure {
//    	public long PrivilegeCount;
//    	public LUID_AND_ATTRIBUTES[] Privileges = new LUID_AND_ATTRIBUTES[100];
//    	{
//    		Privileges[0] = new LUID_AND_ATTRIBUTES();
//    	}
//	}
//    int SE_PRIVILEGE_ENABLED = 0x2;
//    class LUID_AND_ATTRIBUTES extends Structure {
//    	public LUID  Luid;
//    	public int Attributes;
//	}
//	class LUID extends Structure {
//		public long LowPart;
//		public long HighPart;
//		protected void useMemory(Pointer m) {
//			super.useMemory(m);
//		}
//	}
//	class LUIDByReference extends ByReference {
//        public LUIDByReference() {
//            this(null);
//        }
//        public LUIDByReference(LUID luid) {
//            super(Pointer.SIZE);
//            setValue(luid);
//        }
//        public void setValue(LUID luid) {
//            getPointer().setPointer(0, luid != null ? luid.getPointer() : null);
//        }
//        public LUID getValue() {
//            Pointer p = getPointer().getPointer(0);
//            LUID luid = new LUID();
//            luid.useMemory(p);
//            return luid;
//        }
//	}
//}
